package bean.dao;

import java.util.List;

import hbt.HibernateUtil;

import org.hibernate.Session;
import org.hibernate.SessionFactory;


import dominio.Contado;
import dominio.Cotizacion;
import dominio.Financiado;
import dominio.FormaPago;
import dominio.OrdenPedido;
import dominio.Remito;

public class HibernateGeneralDAO {
	private static HibernateGeneralDAO instancia = null;
	private static SessionFactory sf = null;
	private Session session = null;
	
	public static HibernateGeneralDAO getInstancia(){
		if(instancia == null){
			sf = HibernateUtil.getSessionFactory();
			instancia = new HibernateGeneralDAO();
		} 
		return instancia;
	}
	
	private Session getSession(){
		if(session == null || !session.isOpen())
			session = sf.openSession();
		return session;
	}
	
	public void closeSession(){
		if (session.isOpen()) session.close();
	}
	
	public FormaPago getFormaPagoContado(){
		Session s=getSession();
		s.beginTransaction();
		FormaPago formaPago = (FormaPago)s.createQuery("select c from Contado c").list().get(0);
		s.getTransaction().commit();
		return formaPago;
	}
	
	public FormaPago getFormaPagoFinanciado(){
		Session s=getSession();
		s.beginTransaction();
		FormaPago formaPago = (FormaPago)s.createQuery("select f from Financiado f").list().get(0);
		s.getTransaction().commit();
		return formaPago;
	}
	
	public void persistFormaPago(FormaPago formaPago){
		Session s=getSession();
		s.beginTransaction();
		s.persist(formaPago);
		s.flush();
		s.getTransaction().commit();
	}

	public Remito getRemitoByCliente(int idCliente) {
		Session s= getSession();
		Remito r= (Remito) s.createQuery("select r from Remito r where r.idCliente= "+idCliente).uniqueResult();
		s.flush();
		return r;
	}
	
	public Remito getRemitoById(int idRemito){
		Session s=getSession();
		s.beginTransaction();
		Remito remito = (Remito)s.load(Remito.class, new Integer(idRemito));
		s.flush();
		s.getTransaction().commit();
		return remito;
	}
	
	public void updateRemito(Remito remito){
		Session s=getSession();
		s.beginTransaction();
		s.update(remito);
		s.flush();
		s.getTransaction().commit();
	}

	public List<Remito> remitosPendientes() {
		Session s = getSession();
		List<Remito> lista = (List<Remito>)s.createQuery("select remi from Remito remi where remi.estado = 'pendiente'").list();
		return lista;
	}
}
